package com.financing.platform.util;

/**
 * 示例说明
 * 
 * HelloOSS是OSS Java SDK的示例程序，您可以修改endpoint、accessKeyId、accessKeySecret、bucketName后直接运行。
 * 运行方法请参考README。
 * 
 * 本示例中的并不包括OSS Java SDK的所有功能，详细功能及使用方法，请参看“SDK手册 > Java-SDK”，
 * 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/preface.html?spm=5176.docoss/sdk/java-sdk/。
 * 
 * 调用OSS Java SDK的方法时，抛出异常表示有错误发生；没有抛出异常表示成功执行。
 * 当错误发生时，OSS Java SDK的方法会抛出异常，异常中包括错误码、错误信息，详细请参看“SDK手册 > Java-SDK > 异常处理”，
 * 链接地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/exception.html?spm=5176.docoss/api-reference/error-response。
 * 
 * OSS控制台可以直观的看到您调用OSS Java SDK的结果，OSS控制台地址是：https://oss.console.aliyun.com/index#/。
 * OSS控制台使用方法请参看文档中心的“控制台用户指南”， 指南的来链接地址是：https://help.aliyun.com/document_detail/oss/getting-started/get-started.html?spm=5176.docoss/user_guide。
 * 
 * OSS的文档中心地址是：https://help.aliyun.com/document_detail/oss/user_guide/overview.html。
 * OSS Java SDK的文档地址是：https://help.aliyun.com/document_detail/oss/sdk/java-sdk/install.html?spm=5176.docoss/sdk/java-sdk。
 * 
 */

import com.aliyun.oss.OSSClient;
import com.aliyun.oss.model.OSSObject;
import com.aliyun.oss.model.ObjectMetadata;
import org.apache.log4j.Logger;

import java.io.*;

public class AliyunOssUtil {
	static Logger logger = Logger.getLogger(AliyunOssUtil.class);

	// endpoint是访问OSS的域名。如果您已经在OSS的控制台上 创建了Bucket，请在控制台上查看域名。
	// 如果您还没有创建Bucket，endpoint选择请参看文档中心的“开发人员指南 > 基本概念 > 访问域名”，
	// 链接地址是：https://help.aliyun.com/document_detail/oss/user_guide/oss_concept/endpoint.html?spm=5176.docoss/user_guide/endpoint_region
	// endpoint的格式形如“http://oss-cn-hangzhou.aliyuncs.com/”，注意http://后不带bucket名称，
	// 比如“http://bucket-name.oss-cn-hangzhou.aliyuncs.com”，是错误的endpoint，请去掉其中的“bucket-name”。
	private static String endpoint = "http://oss-cn-hangzhou.aliyuncs.com";

	// accessKeyId和accessKeySecret是OSS的访问密钥，您可以在控制台上创建和查看，
	// 创建和查看访问密钥的链接地址是：https://ak-console.aliyun.com/#/。
	// 注意：accessKeyId和accessKeySecret前后都没有空格，从控制台复制时请检查并去除多余的空格。
	private static String accessKeyId = "0TSTGXWQxOZO1Tep";
	private static String accessKeySecret = "IgroUgZjaJET8e9nihAsqlI47L4UGE";

	// Bucket用来管理所存储Object的存储空间，详细描述请参看“开发人员指南 > 基本概念 > OSS基本概念介绍”。
	// Bucket命名规范如下：只能包括小写字母，数字和短横线（-），必须以小写字母或者数字开头，长度必须在3-63字节之间。
	private static String bucketName = "sfacdn";

	// Object是OSS存储数据的基本单元，称为OSS的对象，也被称为OSS的文件。详细描述请参看“开发人员指南 > 基本概念 >
	// OSS基本概念介绍”。
	// Object命名规范如下：使用UTF-8编码，长度必须在1-1023字节之间，不能以“/”或者“\”字符开头。
//	private static String firstKey = "my-first-key";

	private static OSSClient ossClient;

	private static OSSClient getClient() {
		if (ossClient == null) {
			ossClient = new OSSClient(endpoint, accessKeyId, accessKeySecret);
		}
		return ossClient;

	}

	public static String writeImgFileImg(InputStream is, String key) {
		ObjectMetadata om = new ObjectMetadata();
		om.setContentType("image/jpeg");
		getClient().putObject(bucketName, key, is,om );
		return key;
	}

	public static String writeFile(InputStream is, String key) {
		logger.info("AliyunOssUtil writeFile  key:"+key);
		getClient().putObject(bucketName, key, is);
		return key;
	}

	public static void readFile(String key,OutputStream outputStream) throws IOException{

		logger.info("AliyunOssUtil void readFile  key:"+key);
		OSSObject ossObject = getClient().getObject(bucketName,key);
		InputStream inputStream = ossObject.getObjectContent();
		byte[] byteBuffer = new byte[1024 * 4];
		int length = 0;
		while ((length = inputStream.read(byteBuffer)) > 0) {
			outputStream.write(byteBuffer, 0, length);
		}
		inputStream.close();
		outputStream.flush();
		outputStream.close();
		return;
	}
	public static InputStream readFile(String key) throws IOException{
		logger.info("AliyunOssUtil InputStream readFile  key:"+key);
		OSSObject ossObject = getClient().getObject(bucketName,key);
		return ossObject.getObjectContent();
	}
	
	public static void  deleteFile(String key) {
		getClient().deleteObject(bucketName, key);
	}
	public static String writeImgFile2(InputStream is, String key,String imgbaseUrl2) {
		ObjectMetadata om = new ObjectMetadata();
		om.setContentType("image/jpeg");
		getClient().putObject("mayikk",key, is,om );
		return imgbaseUrl2 + key;
	}
	public static void  deleteFile2(String key) {
		getClient().deleteObject("mayikk", key);
	}

	public static void main(String[] args) throws Exception {
		
		
		logger.info("Started");
		
		String key="disk/tupian/productFile_1499394558186.pdf";
		/*InputStream is = new FileInputStream(new File("D:\\test\\productFile_1499394558186.pdf"));
		String s = AliyunOssUtil.writeFile(is, key);
		System.out.println(s);
*/


		FileOutputStream fileOutputStream = new FileOutputStream(new File("D:\\test\\productFile_1499394558181.pdf"));
		AliyunOssUtil.readFile(key,fileOutputStream);

		logger.info("Completed");
	}

}
